#ifndef INPUTOUTPUT_H_
#define INPUTOUTPUT_H_

#include <string>
#include <vector>
#include <iostream>
#include <cassert>
#include <cstring>
#include <cstdlib>

#include "Data.h"
#include "Defines.h"
#include "CSVFile.h"

using namespace std;

// Classe que representa um conjunto de entradas/saídas
class DataSet
{

public:

    // Contrói um conjunto de dados vazio
    DataSet(int nInVars, int nOutVars);
    // Carrega o conjunto de entradas/saídas de um arquivo
    DataSet(const char *file, int filetype);
    virtual ~DataSet();

    // Retorna a entrada/saída de índice i
    Data *get(uint i);
    // Retorna o número de entradas/saídas
    uint size();

    // Retorna o número de variáveis de entrada
    uint getNumberOfInVars();
    // Retorna o número de variáveis de saída
    uint getNumberOfOutVars();

    //Adiciona uma data a estrutura
    void addData(Data *data);

    // Calcula a taxa de sucesso
    void calculateSuccessRate();
    // Retorna a taxa de sucesso
    double getSuccessRate();
    // Seta a taxa de sucesso
    void setSuccessRate(double rate);

    // Retorna o tempo de treinamento ou de teste
    double getTime();
    // Seta o tempo de treinamento ou de teste
    void setTime(double time);

    // Salva as entradas/saídas em um arquivo
    void saveToFile(const char *file);

    // Imprime informações na tela
    void print();

private:

    bool deleteAll;

    uint nInVars;
    uint nOutVars;

    double time;
    double successRate;
    int filetype;

    vector<Data *> data;
};

#endif /* INPUTOUTPUT_H_ */
